home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 2
/
Deutsche Edition 2.iso
/
mac
/
POWERMAC
/
C64
/
SOURCE
/
Instructions.h
< prev
next >
Wrap
Text File
|
1994-06-06
|
4KB
|
143 lines
#define FlagsNZ(z)\
flags &=~(ZER+NEG); if (z==0) flags|=ZER; else flags |=z&128
#define ORA(x) a|=ByteAt(x()); FlagsNZ(a)
#define ASL(x) \
register word addr;\
register byte tbyte;\
addr = x();\
tbyte = ByteAt(addr);\
flags &=~(CAR+NEG+ZER);\
if (tbyte&128) flags |= CAR;\
if (tbyte=tbyte<<1) flags |=tbyte&128; else flags |=ZER;\
RAM[addr] = tbyte
#define LSR(x) \
register word addr;\
register byte tbyte;\
addr=x();\
tbyte=ByteAt(addr);\
flags &=~(CAR+NEG+ZER);\
flags |=tbyte&1;\
if (tbyte=tbyte>>1); else flags |=ZER;\
RAM[addr]=tbyte
#define BCL(x) \
register byte tbyte;\
if (flags&x) pc++; \
else {\
tbyte=ImmediateByte();\
pc++;\
if (tbyte&128) {\
pc-=(tbyte^255)+1;\
return; }\
pc +=tbyte; }
#define BST(x) \
register byte tbyte;\
if (flags&x) {\
tbyte=ImmediateByte();\
pc++;\
if (tbyte&128) {\
pc-=(tbyte^255)+1;\
return; }\
pc +=tbyte; }\
else pc++;
#define CLR(x) flags &=~x; return
#define SET(x) flags |= x; return
#define AND(x) a &= ByteAt(x()); FlagsNZ(a)
#define BIT(x) \
register byte tbyte;\
tbyte=ByteAt(x());\
flags &=~(ZER+NEG+OVF);\
if ((a&tbyte)==0) flags |=ZER;\
flags |=tbyte&(128+64)
#define ROL(x) \
register word addr;\
register byte tbyte;\
addr=x();\
tbyte=ByteAt(addr);\
if (flags&CAR) {\
if (tbyte&128);\
else flags &=~CAR;\
tbyte=(tbyte<<1)|1; }\
else {\
if (tbyte&128) flags|=CAR;\
tbyte=tbyte<<1; }\
FlagsNZ(tbyte);\
RAM[addr]=tbyte
#define EOR(x) a^=ByteAt(x());FlagsNZ(a)
#define ADC(x) \
register word data;\
data=ByteAt(x());\
if (flags&DEC) {\
data = bcd2dec[data]+bcd2dec[a]+((flags&CAR)?1:0);\
flags &= ~(CAR+OVF+NEG+ZER);\
if (data>99) {flags|=CAR+OVF;data -=100;}\
if (data==0) flags|=ZER; else flags |=data&128;\
a=dec2bcd[data];}\
else {\
data += a+((flags&CAR)?1:0);\
flags &= ~(CAR+OVF+NEG+ZER);\
if (data>255) {flags|=OVF+CAR; data &=255;}\
if (data==0) flags|=ZER; else flags |=data&128;\
a=data;}
#define ROR(x) \
register word addr;\
register byte tbyte;\
addr=x(); tbyte=ByteAt(addr);\
if(flags&CAR){if(tbyte&1); else flags&=~CAR;tbyte=(tbyte>>1)|128;}\
else{if(tbyte&1) flags|=CAR;tbyte=tbyte>>1;}\
FlagsNZ(tbyte); RAM[addr]=tbyte
#define STA(x) RAM[x()]=a
#define STY(x) RAM[x()]=y
#define STX(y) RAM[y()]=x
#define CPY(x) \
register byte tbyte;\
tbyte=ByteAt(x()); flags &=~(CAR+ZER+NEG);\
if (y==tbyte) flags |=CAR+ZER;\
else if (y>tbyte) flags |=CAR;\
else flags |=NEG
#define CPX(y) \
register byte tbyte;\
tbyte=ByteAt(y()); flags &=~(CAR+ZER+NEG);\
if (x==tbyte) flags |=CAR+ZER;\
else if (x>tbyte) flags |=CAR;\
else flags |=NEG
#define CMP(x) \
register byte tbyte;\
tbyte=ByteAt(x()); flags &=~(CAR+ZER+NEG);\
if (a==tbyte) flags |=CAR+ZER;\
else if (a>tbyte) flags |=CAR;\
else flags |=NEG
#define SBC(x) \
register int data;\
data=ByteAt(x());\
if (flags&DEC) {\
data = bcd2dec[a]-bcd2dec[data]-((flags&CAR)?0:1);\
flags &= ~(CAR+ZER+NEG+OVF);\
if (data==0) flags |=ZER+CAR;\
else if (data>0) flags |=CAR;\
else {flags|=NEG; data +=100;}\
a=dec2bcd[data];}\
else {\
data = a-data-((flags&CAR)?0:1);\
flags &=~(CAR+ZER+OVF+NEG);\
if (data==0) flags |=ZER+CAR;\
else if (data>0) flags |=CAR;\
else flags|=OVF;\
flags |=data&128;\
a=data&255;}
#define DECR(x) \
register word addr; register byte tbyte;\
addr=x(); tbyte=ByteAt(addr);\
flags &=~(ZER+NEG);\
if (--tbyte) flags |=tbyte&128; else flags|=ZER;\
RAM[addr]=tbyte
#define INCR(x) \
register word addr; register byte tbyte;\
addr=x(); tbyte=ByteAt(addr);\
flags &=~(ZER+NEG);\
if (++tbyte) flags |=tbyte&128; else flags|=ZER;\
RAM[addr]=tbyte
#define LDA(x) a=ByteAt(x()); FlagsNZ(a)
#define LDY(x) y=ByteAt(x()); FlagsNZ(y)
#define LDX(y) x=ByteAt(y()); FlagsNZ(x)